From 490bdc1dddfb20114ddb8bee6fc021797d13ff03 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 10 Aug 2006 12:08:51 +0000 Subject: [PATCH] Remove the idle source in ::finalize... 2006-08-10 Emmanuele Bassi * gtk/gtkrecentchoosermenu.c: (gtk_recent_chooser_menu_finalize): Remove the idle source in ::finalize... (idle_populate_func), (idle_populate_clean_up): ...and reset the idle source id at the end of the idle loop while we hold the GDK mutex lock. (#350605, reported by Wouter Bolsterlee, patch by Chris Wilson) --- ChangeLog | 12 ++++++++++++ ChangeLog.pre-2-10 | 12 ++++++++++++ gtk/gtkrecentchoosermenu.c | 15 ++++++++------- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b7691763e..73c7dd2501 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-08-10 Emmanuele Bassi + + * gtk/gtkrecentchoosermenu.c: + (gtk_recent_chooser_menu_finalize): Remove the idle + source in ::finalize... + + (idle_populate_func), + (idle_populate_clean_up): ...and reset the idle source + id at the end of the idle loop while we hold the GDK mutex + lock. (#350605, reported by Wouter Bolsterlee, patch by + Chris Wilson) + 2006-08-10 Michael Natterer * gdk/quartz/gdkwindow-quartz.c diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 9b7691763e..73c7dd2501 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,15 @@ +2006-08-10 Emmanuele Bassi + + * gtk/gtkrecentchoosermenu.c: + (gtk_recent_chooser_menu_finalize): Remove the idle + source in ::finalize... + + (idle_populate_func), + (idle_populate_clean_up): ...and reset the idle source + id at the end of the idle loop while we hold the GDK mutex + lock. (#350605, reported by Wouter Bolsterlee, patch by + Chris Wilson) + 2006-08-10 Michael Natterer * gdk/quartz/gdkwindow-quartz.c diff --git a/gtk/gtkrecentchoosermenu.c b/gtk/gtkrecentchoosermenu.c index 54ee86302e..1e066744b3 100644 --- a/gtk/gtkrecentchoosermenu.c +++ b/gtk/gtkrecentchoosermenu.c @@ -250,6 +250,9 @@ gtk_recent_chooser_menu_finalize (GObject *object) g_signal_handler_disconnect (priv->manager, priv->manager_changed_id); priv->manager_changed_id = 0; + if (priv->populate_id) + g_source_remove (priv->populate_id); + priv->manager = NULL; if (priv->sort_data_destroy) @@ -952,7 +955,10 @@ idle_populate_func (gpointer data) GDK_THREADS_ENTER (); pdata = (MenuPopulateData *) data; - + priv = pdata->menu->priv; + + priv->populate_id = 0; + if (!pdata->items) { pdata->items = gtk_recent_chooser_get_items (GTK_RECENT_CHOOSER (pdata->menu)); @@ -984,7 +990,6 @@ idle_populate_func (gpointer data) } info = g_list_nth_data (pdata->items, pdata->loaded_items); - priv = pdata->menu->priv; /* skip non-local items on request */ if (priv->local_only && @@ -1062,11 +1067,7 @@ check_and_return: static void idle_populate_clean_up (gpointer data) { - MenuPopulateData *pdata = data; - - pdata->menu->priv->populate_id = 0; - - g_slice_free (MenuPopulateData, pdata); + g_slice_free (MenuPopulateData, data); } static void -- 2.30.2